/****************************************************************************************************
简单的回显网络服务器

****************************************************************************************************/


#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <string>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>


#ifndef LOG_ERROR(str)
#define LOG_ERROR(str) 						\
		do 									\
		{									\
			perror(str);					\
			exit(1);						\
		} while (0);						
#endif



int main(int argc, char const *argv[])
{
	int socket_fd,connect_fd;
	if ((socket_fd = socket(AF_INET,SOCK_STREAM,0)) < 0)
		LOG_ERROR("create failed");
	struct sockaddr_in servaddr;
	memset(&servaddr,0,sizeof(&servaddr));
	servaddr.sin_family = AF_INET;
	servaddr.sin_port = htons(8000);
	servaddr.sin_addr.s_addr = htonl(INADDR_ANY);

	if (bind(socket_fd,(struct sockaddr*)&servaddr,sizeof(servaddr)) == -1)
		LOG_ERROR("bind failed");
	if (listen(socket_fd,10) == -1)
		LOG_ERROR("nonsock");
	if ((connect_fd = accept(socket_fd,(struct sockaddr*)NULL,NULL)) == -1)
		LOG_ERROR("accept failed");
	char buf[1024] = {0};
	while(1)
	{
		memset(&buf,0,1024);
		recv(connect_fd,buf,1023,0);
		send(connect_fd,buf,1023,0);
        printf("recv msg from client: %s\n", buf);

	}
	close(connect_fd);
	close(socket_fd);
	return 0;
}
